/* *****************************************************************************
 * JFab (http://code.google.com/p/jfab)
 * Copyright (c) 2011 JFab.org
 * Admin jfab@jeffreythompson.net
 *
 * See the file "LICENSE.txt" for information on usage and redistribution of
 * this file, and for a DISCLAIMER OF ALL WARRANTIES.
 * *****************************************************************************/

package org.jfab.core.factory;

import java.util.List;

import org.jfab.core.collection.CGAnnotationList;
import org.jfab.core.collection.CGConstructorList;
import org.jfab.core.collection.CGEnumItemList;
import org.jfab.core.collection.CGFieldList;
import org.jfab.core.collection.CGInitializationBlockList;
import org.jfab.core.collection.CGMethodList;
import org.jfab.core.collection.CGTypeList;
import org.jfab.core.collection.CommentList;
import org.jfab.core.collection.ModifierList;
import org.jfab.core.model.CGEnum;

/**
 * Defines methods required by a code generator enum factory.
 */
public interface CGEnumFactory
{
    /**
     * @param referencedTypes Referenced types.
     * @param packageName Package name.
     * @param commentLines Comment lines.
     * @param annotations Annotations.
     * @param modifiers Modifiers.
     * @param enumName Enum name. (required)
     * @param typeParameters Type parameters.
     * @param enumItems Enum items.
     * @param initializationBlocks Initialization blocks.
     * @param constructors Constructors.
     * @param fields Fields.
     * @param methods Methods.
     * 
     * @return a new code generator enum.
     */
    CGEnum createEnum(CGTypeList referencedTypes, String packageName,
            CommentList commentLines, CGAnnotationList annotations,
            ModifierList modifiers, String enumName,
            List<String> typeParameters, CGEnumItemList enumItems,
            CGInitializationBlockList initializationBlocks,
            CGConstructorList constructors, CGFieldList fields,
            CGMethodList methods);
}
